1. Field of the Invention
The present invention relates to the field of transmission control protocol (TCP) and network interface cards (NICs). Specifically, an embodiment of the present invention relates to a method and a system for offloading a large block of data and transferring the management of ack-based data transmittal from TCP to NICs.
2. Related Art
Over the past few decades, computer systems have become corporate-wide resources, essential for day-to-day operations. Additionally, they have been playing an increasingly important role in military and government environments. As strategic and tactical computer communication networks have been developed and deployed, the needs for providing reliable means of interconnecting them and for providing standard interprocess communication protocols to support a broad range of applications has led to the development of inter-process communication protocol standardization.
Transmission Control Protocol (TCP) is a connection-oriented, end-to-end COMMUNICATION protocol designed to fit into a layered hierarchy of protocols that support multi-network applications. TCP provides for inter-process communication between pairs of processes in host computers attached to distinct but interconnected computer communication networks. The TCP operates above a wide spectrum of communication systems ranging from hard-wired connections to packet-switched or circuit-switched networks.
TCP fits into layered protocol architecture just above a basic Internet Protocol (IP) which provides a way for TCP to send and receive variable-length blocks of information enclosed in Internet data-gram “envelopes”. Among its multiple functions, the IP also deals with any fragmentation or re-assembly of the TCP segments required to achieve transport and delivery through multiple networks and interconnecting gateways.
TCP interfaces on one side to user or application processes (“host processes”) and on the other side to IP. The interface between an application process and TCP consists of a set of calls much like the calls an operating system provides to an application process for manipulating files. For example, there are calls to open and close connections and to send and receive data on established connections.
The primary purpose of TCP is to provide reliable connection service between pairs of processes. To do so requires facilities in a number of areas including basic data transfer, reliability and flow control. TCP is able to transfer a continuous stream of bytes in each direction between its users by packaging some number of bytes into segments for transmission through the Internet system. In general, TCP decides when to block and forward data at its own convenience.
TCP needs to be able to regulate or control its flow of data, and to recover from data that is damaged, lost, duplicated or delivered out of order by the Internet communication system. This is achieved by assigning a sequence number to each byte transmitted, and requiring a positive acknowledgement (ACK) from the receiving TCP. If the ACK is not received within a timeout interval, the data is retransmitted. At the receiver, the sequence numbers are used to correctly order data portions that may be received out of order and to eliminate duplicates.
TCP provides a means for the receiver to govern the amount of data sent by the sender, known in the art as flow control. This is achieved by returning a “window” with every ACK indicating a range of acceptable sequence numbers beyond the last segment successfully received. The window indicates an allowed number of bytes that the sender may transmit before receiving further permission.
In addition to the TCP's functions of data packaging, data transfer, reliability and flow control, it also has responsibility for multiplexing processes among host computers, establishing connections and tracking precedence and security of communications. Thus, TCP is indeed a busy protocol.
The interface from the host computer to the network is, in many cases, by means of a hardware unit called a network interface card (NIC). This is an expansion board or card that is installed in a host computer to provide a dedicated full-time connection to a network. The NIC has its own processor and, thus, the potential for being programmed to perform certain functions.
Hosts are computers attached to a network and, from the communication network's point of view, are the sources and destinations of packets. The term packet is used generically to mean the data of one transaction between a host and its network. In the conventional art, TCP has responsibility for packaging the data into packets that are no larger than a standard Maximum Transmission Unit (MTU) prior to sending it out. MTUs can be relatively small, e.g., 1,500 bytes on Ethernet. TCP then sends the data packets in response to acknowledgements (ACKs) from the host computer that include the amount of data that may be sent in the next transmission.
In order to alleviate some of the transmit side of the TCP processing cost, a number of hardware/software vendors have provided a basic scheme for offloading to the NIC called “LSO” or large segment offload. In these cases, a larger portion of data is off-loaded and the NIC portions the data into packets. The NIC then sends out two or more packets at a time (rather than one packet at a time as previously provided by TCP alone), depending on the size of the window opened by a previously received ACK. The window is often small and can only accommodate two packets. These schemes, although providing a modicum of relief to the TCP, have not provided a significant improvement in host processing performance. The TCP still has responsibility for interfacing with the recipient host and responding to acknowledgements by instructing the NIC to send out more data.